Java算法---杨辉三角的打印输出

/*
*1
 1 1
 1 2 1
 1 3 3 1
 1 4 6 4 1
 1 5 10 10 5 1
输入描述:
输入数据包含多组测试数据。

每组测试数据的输入只有一个正整数n(1≤n≤128),表示将要输出的杨辉三角的层数。

输入以0结束
 
输出描述:
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
*
/
/*这道题需要注意以下几点:
1、这道题主要还是对大数据的处理,和斐波那契数列有点像,给的测试用例都比较大,用基本的int,long之类的根本就不行,long型的最多到68,就超了,题目给的要是1≤n≤128,所以这个题主要是看如何操作这种比较大的数值。Java里面提供了一个很强大的BigInteger,这个类可以处理任意大的数字,里面有好多方法,可以查查JDK多了解一下关于这个类的用法,可以解决好多比较大的数字的问题。
2、然后就是这个题的思想,仔细观察,可以发现这样一个规律,rs[i][j]=rs[i-1][j]+rs[i-1][j-1]);我们可以利用这个规律在一个二维矩阵中动态打表,最后输出这个二维矩阵中不为零的数字即可。
3、输出格式的问题:题目中让每行数字之间用空格隔开,那么我们需要注意在每一行的最后一个数字后面是不能加空格的,由于空格我们看不见,所以打印出来看上去和答案一样,但是会报错,就是因为多了一个空格,我举个例子,比如我用“*”代替空格,便于观察,如下输出:
1*
1*1*
1*2*1*
1*3*3*1*
如果将“*”换成“ ”感觉和题目的输出一样,
其实是每行末尾多了一个空格,所以这个要注意。
*/
下面我贴上自己的代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
 Scanner sc=new Scanner(System.in);
 while(sc.hasNext()){
 int n=sc.nextInt();
 if(n==0){
  break;
 }
 BigInteger [][] rs=new BigInteger[n][n];
 for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
       rs[i][j] = new BigInteger("0");
      }
    } 
 for (int i = 0; i < rs.length; i++) {
  rs[i][0]=new BigInteger("1");
 }
 for (int i = 1; i < rs.length; i++) {
  for (int j = 1; j < i+1; j++) {
   rs[i][j]=rs[i-1][j].add(rs[i-1][j-1]);
  }
 }
 StringBuffer sb=new StringBuffer();
 for (int i = 0; i < rs.length; i++) {
  for (int j = 0; j < i+1; j++) {
    sb.append(rs[i][j]+"*");
  }
  System.out.println(sb.substring(0, sb.length()));
  sb.replace(0, sb.length(), "");
 }
 System.out.println();
 }
}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值